package src.daily;

import java.util.ArrayList;
import java.util.List;

/**
 * @author FengBaiyu
 */
public class H1177
{
    /**
     * 给你一个字符串 s，请你对 s 的子串进行检测。
     * <p>
     * 每次检测，待检子串都可以表示为 queries[i] = [left, right, k]。我们可以 重新排列 子串 s[left], ..., s[right]，并从中选择 最多 k 项替换成任何小写英文字母。
     * <p>
     * 如果在上述检测过程中，子串可以变成回文形式的字符串，那么检测结果为 true，否则结果为 false。
     * <p>
     * 返回答案数组 answer[]，其中 answer[i] 是第 i 个待检子串 queries[i] 的检测结果。
     * <p>
     * 注意：在替换时，子串中的每个字母都必须作为 独立的 项进行计数，也就是说，如果 s[left..right] = "aaa" 且 k = 2，我们只能替换其中的两个字母。（另外，任何检测都不会修改原始字符串 s，可以认为每次检测都是独立的）
     *
     * @param s
     * @param queries
     * @return
     */
    public List<Boolean> canMakePaliQueries(String s, int[][] queries)
    {
        int[] ch = new int[s.length() + 1];
        List<Boolean> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++)
        {
            ch[i + 1] = ch[i] ^ (1 << (s.charAt(i) - 'a'));
        }
        for (int i = 0; i < queries.length; i++)
        {
            int left = queries[i][0];
            int right = queries[i][1];
            int k = queries[i][2];
            int total = 0;
            list.add(check(ch[right], ch[left], k));
        }
        return list;

    }

    private static Boolean check(int ch1, int ch2, int k)
    {
        int total = 0;
        int tmp = ch1 ^ ch2;
        while (tmp > 0)
        {
            tmp &= (tmp - 1);
            total++;
        }
        if (total  <= k*2+1)
        {
            return Boolean.TRUE;
        }
        else
        {
            return Boolean.FALSE;
        }
    }

    public static void main(String[] args)
    {
        String s = "ninmjmj";
        int[][] ch = new int[s.length() + 1][26];
        List<Boolean> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++)
        {
            for (int j = i; j < s.length(); j++)
            {
                ch[j + 1][s.charAt(i) - 'a'] = ch[i][s.charAt(i) - 'a'] ^ 1;
            }
        }
        for (int j = 0; j < 26; j++)
        {
            if ((ch[6][j] ^ ch[7][j]) == 1)
            {
                System.out.print((char)('a' + j));
            }
        }

    }

}
